package ar.com.algotres.tpdos.model.aviones;

import ar.com.algotres.tpdos.model.aterrizable.CaracteristicasPista;
import ar.com.algotres.tpdos.model.aterrizable.Pista;
import ar.com.algotres.tpdos.model.controlador.ITorreDeControl;
import ar.com.algotres.tpdos.model.fisica.Movimiento;
import ar.com.algotres.tpdos.model.fisica.Posicion;
import ar.com.algotres.tpdos.model.fisica.Trayectoria;
import ar.com.algotres.tpdos.views.juego.IVistaJuego;

public class AvionComputarizado extends Avion {

	private static final Double PESO_AVION = 1000.0;

	public AvionComputarizado(ITorreDeControl torre, Movimiento movimiento,
			Posicion posicion) {
		super(torre, movimiento, posicion, caracteristicas());

	}

	private static CaracteristicasAvion caracteristicas() {
		return new CaracteristicasAvion(PESO_AVION);
	}


	public boolean puedeAterrizarEnPista(Pista pista) {
		CaracteristicasPista caracteristicasPista = pista
				.getCaracteristicasPista();
		return caracteristicasPista.admiteAviones()
				&& (caracteristicasPista.getPesoMaximoAdmitido() > getCaracteristicas()
						.getPeso());
	}

	@Override
	public void mover() {
		super.mover();
		if(getTrayectorias().isEmpty() && alcanzoFinalDeTrayectoria()) {
			Posicion posicionDeAterrizaje = getTorreDeControl().obtenerPistaDeAterrizaje(this);
			actualizarMovimiento(new Trayectoria(getPosicion(), posicionDeAterrizaje));
		}
	}
	
	private Boolean alcanzoFinalDeTrayectoria() {
		return getMovimiento().getTrayectoria().getPosicionFinal().equals(getPosicion());
	}

	@Override
	public void avionCreado(IVistaJuego vistaJuego) {
		vistaJuego.avionComputarizadoCreado(this);	
	}
	
}
